Spring学习2:Spring DI(依赖注入)
Spring DI
DI(依赖注入)就是给属性赋值。
spring容器的执行顺序
依赖注入的方法
setter注入
使用类的setter方法进行注入是最常用的一种方法,即通过调用类的setXXX()方法,注入所依赖的属性。
举例说明,写person类和student类:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58public class Person {
public Person(){
System.out.println("person");
}
private Long pid;
private String name;
private Student student;
private List list;
private Set sets;
private Properties properties;
private Map map;
public Long getPid() {
return pid;
}
public void setPid(Long pid) {
this.pid = pid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Set getSets() {
return sets;
}
public void setSets(Set sets) {
this.sets = sets;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
}
1 | public class Student { |
在spring的配置文件中把person和student放入到spring容器中1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45<bean id="student" class="cn.zju.spring.Student"></bean>
<bean id="person" class="cn.zju.spring.Person">
<!--
property代表该bean的属性
pid,name看做是基本类型,用value赋值
student是一个引用类型,用ref赋值
-->
<property name="pid" value="10"></property>
<property name="name" value="Tom"></property>
<property name="student" ref="student"></property>
<property name="list">
<list>
<value>list1</value>
<value>list2</value>
<ref bean="student"/>
</list>
</property>
<property name="sets">
<set>
<value>set1</value>
<value>set2</value>
<ref bean="student"/>
</set>
</property>
<property name="map">
<map>
<entry key="m1">
<value>map1</value>
</entry>
<entry key="m2">
<ref bean="student"/>
</entry>
</map>
</property>
<property name="properties">
<props>
<prop key="p1">
prop1
</prop>
<prop key="p2">
prop2
</prop>
</props>
</property>
</bean>
在上述配置信息中,property的name属性值必须与setter方法名对应,即property的name值是对应的setXXX方法名的set后的单词,且首字母变小写。
构造方法注入
除了使用setter方法注入外,还可以使用构造方法注入,即通过调用带参数的构造方法注入所依赖的属性。
举例,假设Person类中有如下的构造方法:1
2
3
4
5public Person(Long pid,String name,Student student){
this.pid = pid;
this.name = name;
this.student = student;
}
那么在配置文件中可以通过如下配置,使用上述构造方法对Person实例注入属性:1
2
3
4
5
6
7
8
9
10
11
12
13<bean id="student" class="cn.zju.spring.Student"></bean>
<bean id="person" class="cn.zju.spring.Person">
<!--
指定的构造函数中的某一个参数
index 参数的索引值,从0开始
type 参数的类型
value 如果参数是基本类型,则用value赋值
ref 如果参数是引用类型,则用ref赋值
-->
<constructor-arg index="0" type="java.lang.Long" value="10"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" value="Tom "></constructor-arg>
<constructor-arg index="2" ref="student"></constructor-arg>
</bean>
在平时开发中,主要使用上述两种依赖注入的方法。